package ModelLayer;

import java.util.ArrayList;
/**
 * 
 * @author (GP3 Project Solutions) 
 * @version (05-06-2011 JSM: Oprettelse af klassen)
 */
public class VareKatalog
{
    // instans variabler
    private ArrayList<VareBeskrivelse> vareBeskrivelser;
    private static VareKatalog instance = null;

    /**
     * Konstruktør for objekter af klassen Varekatalog
     */
    private VareKatalog()
    {
        // initialisering af instans variabler
        vareBeskrivelser = new ArrayList<VareBeskrivelse>();
    }
    
    /**
     * Metoden tilføjer en varebeskrivelse til arrayliste
     * @param vareBeskrivelse Objekt af typen VareBeskrivelse
     */
    public void tilfoejProduktBeskrivelse(VareBeskrivelse vareBeskrivelse)
    {
        vareBeskrivelser.add(vareBeskrivelse);
    }
    
    /**
     * Metode der finder og returnerer en varebeskrivelse
     * @param navn En vares navn
     * @return VareBeskrivelse Objekt af typen VareBeskrivelse
     */
    public VareBeskrivelse findVareBeskrivelse(String navn)
    {
        int index = 0;
        boolean found = false;
        VareBeskrivelse vareBeskrivelse = null;
        String test = vareBeskrivelser.get(index).hentNavn();
        
        while(index < vareBeskrivelser.size())
        {
            if(vareBeskrivelser.get(index).hentNavn().equals(navn) && !found)
            {
                vareBeskrivelse = vareBeskrivelser.get(index);
                found = true;
            }
            index++;
        }
        return vareBeskrivelse;
    }
    
    /**
     * Metode der finder og returnerer en varebeskrivelse
     * @param navn En vares navn
     * @return VareBeskrivelse Objekt af typen VareBeskrivelse
     */
    public ArrayList<VareBeskrivelse> findVareBeskrivelse2(String navn)
    {
        int index = 0;
        ArrayList _vareBeskrivelser = new ArrayList<VareBeskrivelse>();
        //VareBeskrivelse vareBeskrivelse = null;
        //String test = vareBeskrivelser.get(index).hentNavn();
        
        while(index < vareBeskrivelser.size())
        {
            if(vareBeskrivelser.get(index).hentNavn().startsWith(navn))
            {
                _vareBeskrivelser.add(vareBeskrivelser.get(index));
            }
            index++;
        }
        return _vareBeskrivelser;
    }
    
    /**
     * Metode der finder og returnerer en varebeskrivelse
     * @param vareId En vares id
     * @return VareBeskrivelse Objekt af typen VareBeskrivelse
     */
    public VareBeskrivelse findVareBeskrivelseId(int vareId)
    {
        int index = 0;
        boolean found = false;
        VareBeskrivelse vareBeskrivelse = null;
        
        while(index < vareBeskrivelser.size())
        {
            if(vareBeskrivelser.get(index).hentVareId() == vareId && !found)
            {
                vareBeskrivelse = vareBeskrivelser.get(index);
                found = true;
            }
            index++;
        }
        return vareBeskrivelse;
    }
    
    /**
     * Metoden opdaterer en vares data
     * @param id Varens id
     * @param beskrivelse Varens beskrivelse
     * @param navn Varens navn
     * @param pris Varens pris
     * @param lokation Varens lokation
     */
    public void opdaterVareBeskrivelse(int id, String beskrivelse, String navn, double pris, String lokation)
    {
        VareBeskrivelse vareBeskrivelse = findVareBeskrivelseId(id);
        vareBeskrivelse.angivBeskrivelse(beskrivelse);
        vareBeskrivelse.angivNavn(navn);
        vareBeskrivelse.angivPris(pris);
        vareBeskrivelse.angivLokation(lokation);  
    }
    
    /**
     * Opretter en instans af VareKatalog
     * @return Returnerer en instans af VareKatalog
     */
    public static VareKatalog getInstance()
    {
        if(instance == null)
        {
            instance = new VareKatalog();
        }
        return instance;
    }
}

